<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
	/**
	 * CodeIgniter
	 *
	 * An open source application development framework for PHP 4.3.2 or newer
	 *
	 * @package		CodeIgniter
	 * @author		ExpressionEngine Dev Team
	 * @copyright	Copyright (c) 2008 - 2009, EllisLab, Inc.
	 * @license		http://codeigniter.com/user_guide/license.html
	 * @link		http://codeigniter.com
	 * @since		Version 1.0
	 * @filesource
	 */
	// ------------------------------------------------------------------------
	
	/**
	 * @package		CodeIgniter
	 * @subpackage	Libraries
	 * @author		AnhDT
	 */
	require_once APP_LIBRARY_PATH . 'tree/paginator/engine/st_paginator_engine_interface.php';
	class st_paginator_select implements st_paginator_engine_interface {
		// Cơ sở dữ liệu để thực hiện truy vấn
		// Lớp: CI_DB_mysql_driver
		protected static $_db = null;
		protected $_select = null;
		protected $_rowCount = null;
		public function __construct($_selectQuery = '') {
			self::getDatabase();
			$this->setSelectQuery($_selectQuery);
			if (!empty($_selectQuery)) {
				$this->_rowCount = self::$_db->query($_selectQuery)->num_rows();
			}
		}
		/**Lấy về cơ sở dữ liệu*/
		public static function getDatabase() {
			if (null === self::$_db) {
				$CI = & get_instance();
				if (empty($CI) || !class_exists('CI_DB_mysql_driver') || !isset($CI->db)) {
					return false;	
				}
				self::$_db = & $CI->db;	
			}	
			return self::$_db;
		}		
		/** Đếm số lượng bản ghi có trong bộ phân trang */
		public function count() {
			if (self::$_db === null) {
				return 0;
			}
			if (null === $this->_rowCount) {
				if (!empty($this->_select)) {
					$this->_rowCount = self::$_db->query($this->_select)->num_rows();	
				} else {
					$this->_rowCount = 0;	
				}
			}
			return $this->_rowCount;
		}
		/**Lấy về các bản ghi thuộc 1 trang*/
		public function getItems($_offset, $_itemCountPerPage) {
			/**Nếu vẫn chưa thiết lập câu lệnh truy vấn*/
			$_query = preg_replace('/^(limit\s.*)$/', '', $this->getSelectQuery());
			if (empty($_query)) {
				return false;
			}
			$_database = self::getDatabase();
			$_query .= " LIMIT $_offset, $_itemCountPerPage";
			$this->setSelectQuery($_query);
			return $_database->query($_query)->result();
		}	
		/**Lấy về câu lệnh truy vấm*/
		public function getSelectQuery() {
			return (string)$this->_selectQuery;	
		}
		/**Thiết lập câu lệnh truy vấm*/
		public function setSelectQuery($_query = '') {
			if (empty($_query)) {
				return false;	
			}
			$this->_selectQuery = $_query;
			return $this;
		}
	}
?>